package cn.edu.swu.miniwebsvr.handler;

import cn.edu.swu.miniwebsvr.core.Handler;
import cn.edu.swu.miniwebsvr.core.Parameter;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.util.Map;

/**
 * EchoHandler 实现 Handler 接口，用于将客户端请求的**方法、所有参数（URL参数 + Body参数）**以HTML形式回显给客户端，
 * 主要用于调试/验证请求参数的传递逻辑是否正常。
 */
public class EchoHandler implements Handler {

    @Override
    public void handle(Parameter request, OutputStream response) {
        // 用PrintWriter封装输出流，简化字符形式的响应写入
        PrintWriter writer = new PrintWriter(response);
        // 获取“URL参数 + Body参数”的合并结果
        Map<String, String> params = request.getAllParams();
        // 构建回显的HTML内容（包含请求方法、参数列表）
        StringBuilder contentBuilder = new StringBuilder();
        contentBuilder.append("<h1>Echo Server Response</h1>");
        contentBuilder.append("<h2>Request Details:</h2>");
        contentBuilder.append("<p>Method: ").append(request.getMethod()).append("</p>");

        // TODO: [学号/姓名] 根据接收到的参数Map构建HTML列表，回显给客户端
        if (params.isEmpty()) {
            contentBuilder.append("<h2>No Parameters Received.</h2>");
        } else {
            contentBuilder.append("<h2>Received Parameters:</h2>");
            contentBuilder.append("<ul>");
            for (Map.Entry<String, String> entry : params.entrySet()) {
                contentBuilder.append("<li><strong>").append(entry.getKey())
                        .append("</strong>: ").append(entry.getValue()).append("</li>");
            }
            contentBuilder.append("</ul>");
        }

        String content = contentBuilder.toString();

        // TODO: [学号/姓名] 构造完整的 HTTP 响应头
        writer.println("HTTP/1.1 200 OK");
        writer.println("Content-Type: text/html; charset=UTF-8");
        writer.println("Content-Length: " + content.getBytes().length);
        writer.println("Connection: close");
        writer.println();

        writer.println(content);
        writer.flush();
    }
}
